package dao.mysql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import conexion.BDConexion;
import dao.interfaces.UsuarioDAO;
import beans.Usuario;

public class MySqlUsuarioDAO implements UsuarioDAO {

	@Override
	public List<Usuario> ListarUsuario(String codigo, String nombre,
			String apepa) {

		List<Usuario> lista = new ArrayList<Usuario>();
		Connection cn = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
		try {
			if (codigo.isEmpty()) {
				codigo = null;
			}
			if (nombre.isEmpty()) {
				nombre = null;
			}
			if (apepa.isEmpty()) {
				apepa = null;
			}
			cn = new BDConexion().obtenerConexion();
			String sql = "SELECT * FROM bd_inictel_dcc.usuario u where u.cod_usu = ifnull(?,u.cod_usu) and u.nom_usu  like  concat('%',ifnull(?,''),'%') and u.ap_usu like concat('%',ifnull(?,''),'%');";
			pst = cn.prepareStatement(sql);
			pst.setString(1, codigo);
			pst.setString(2, nombre);
			pst.setString(3, apepa);
			rs = pst.executeQuery();
			while (rs.next()) {
				Usuario u = new Usuario(rs.getString(1), rs.getString(2),
						rs.getString(3), rs.getString(4), rs.getString(5),
						rs.getInt(6), rs.getString(7), rs.getString(8),
						rs.getString(9),rs.getString(10),rs.getString(11));
				lista.add(u);
			}
		} catch (Exception e) {

		} finally {
			try {
				if (cn != null) {
					cn.close();
				}
				if (pst != null) {
					pst.close();
				}
				if (rs != null) {
					rs.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		return lista;
	}
	
	@Override
	public List<Usuario> ListarUsuario() {
		List<Usuario> lista = new ArrayList<Usuario>();
		Connection cn = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
		try {
			
			cn = new BDConexion().obtenerConexion();
			String sql = "SELECT * FROM bd_inictel_dcc.usuario";
			pst = cn.prepareStatement(sql);
			rs = pst.executeQuery();
			while (rs.next()) {
				Usuario u = new Usuario(rs.getString(1), rs.getString(2),
						rs.getString(3), rs.getString(4), rs.getString(5),
						rs.getInt(6), rs.getString(7), rs.getString(8),
						rs.getString(9),rs.getString(10),rs.getString(11));
				lista.add(u);
			}
		} catch (Exception e) {

		} finally {
			try {
				if (cn != null) {
					cn.close();
				}
				if (pst != null) {
					pst.close();
				}
				if (rs != null) {
					rs.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		return lista;
	}

	@Override
	public int RegistrarUsuario(Usuario bean) {
		int salida = -1;
		Connection cn = null;
		PreparedStatement pst = null;
		try {
			cn = new BDConexion().obtenerConexion();
			String sql = "CALL bd_inictel_dcc.InsertUsuario(?,?,?,?,?,?,?,?,?,?,?);";
			pst = cn.prepareStatement(sql);
			pst.setString(1, bean.getCodigo());
			pst.setString(2, bean.getNombres());
			pst.setString(3, bean.getApepa());
			pst.setString(4, bean.getApema());
			pst.setString(5, bean.getFecna());
			pst.setInt(6, bean.getDistrito());
			pst.setString(7, bean.getDireccion());
			pst.setString(8, bean.getTelefono());
			pst.setString(9, bean.getCorreo());
			pst.setString(10, bean.getUser());
			pst.setString(11, bean.getPass());
			salida = pst.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				cn.close();
				pst.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

		return salida;
	}

	@Override
	public int ActualizarUsuario(Usuario bean) {
		int salida = -1;
		Connection cn = null;
		PreparedStatement pst = null;
		try {
			cn = new BDConexion().obtenerConexion();
			String sql = "CALL bd_inictel_dcc.UpdateUsuario(?,?,?,?,?,?,?,?,?,?,?);";
			pst = cn.prepareStatement(sql);
			pst.setString(1, bean.getCodigo());
			pst.setString(2, bean.getNombres());
			pst.setString(3, bean.getApepa());
			pst.setString(4, bean.getApema());
			pst.setInt(5, bean.getDistrito());
			pst.setString(6, bean.getDireccion());
			pst.setString(7, bean.getTelefono());
			pst.setString(8, bean.getCorreo());
			pst.setString(9, bean.getFecna());
			pst.setString(10, bean.getUser());
			pst.setString(11, bean.getPass());
			salida = pst.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				cn.close();
				pst.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

		return salida;
	}

	@Override
	public int EliminarUsuario(String codigo) {
		int salida = -1;
		Connection cn = null;
		PreparedStatement pst = null;
		try {
			cn = new BDConexion().obtenerConexion();
			String sql = "CALL bd_inictel_dcc.DeleteUsuario(?);";
			pst = cn.prepareStatement(sql);
			pst.setString(1, codigo);
			salida = pst.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				cn.close();
				pst.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

		return salida;
	}

	@Override
	public String GenerarCodigo() {
		String codi = null;
		Connection cn = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
		try {
			cn = new BDConexion().obtenerConexion();
			String sql = "SELECT * FROM bd_inictel_dcc.cod_usu;";
			pst = cn.prepareStatement(sql);
			rs = pst.executeQuery();
			while (rs.next()) {
				codi = rs.getString(1);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				cn.close();
				pst.close();
				rs.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		return codi;
	}

	@Override
	public Usuario ValidarUsuario(String usu, String pass) {
Usuario bean = null;
		
		Connection cn = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
		
		try {
			cn = new BDConexion().obtenerConexion();
			String sql = "CALL USP_Logueo(?,?)";
			pst = cn.prepareStatement(sql);
			pst.setString(1, usu);
			pst.setString(2, pass);
			
			rs = pst.executeQuery();
			
			while (rs.next()) {
				bean = new Usuario();
				bean.setNombres(rs.getString(1));
				bean.setApepa(rs.getString(2));
				bean.setCorreo(rs.getString(3));
			}
						
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				if(cn!=null)	cn.close();
				if(pst!=null)	pst.close();
				if(rs!=null)	rs.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		return bean;
	}



}
